package ext.tianma.bom.expand.config;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.commons.lang.StringUtils;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import wt.doc.WTDocument;
import ext.tianma.bom.expand.vo.MaterielVo;
import ext.tianma.bom.expand.xls.XlsReader;
import ext.tianma.bom.expand.xls.XlsReaderFactory;
import ext.tianma.number.util.DocUtil;


/**
 * 类名: ReadConfig </br>
 * 包名: ext.tianma.bom.expand.config
 * 描述: 读取【需要生效图纸物料清单】配置文件
 * @author xucr 
 * 创建时间: 2020年5月29日
 * 发布版本: V1.0
 */
public class ReadConfig {
	
	private static final Logger logger = LoggerFactory.getLogger(ReadConfig.class);
	
	/**读取Excel中指定sheet的内容*/
	private static final String SHEET_NAME = "需生效图纸物料清单";
	
	/**设定Excel所在文档的编码，以配置的形式维护*/
	private static final String DOC_NAME = "EFFECTIVE_BOM";
	
	/**开始读取行和列*/
	private static final int START_ROW = 4;
	private static final int START_COLUMN = 1;
	
	/**
	 * 存储的值
	 * map1：外层，
	 * 		key：规则：【英文名称 -- 中文名称】
	 * 		value：map2
	 * map2：内层，
	 * 		key：应用分类对应名称，如【消费品A-SI】
	 * 		value：是否图纸的值，如【是】
	 * */
	private static Map<String, Object> map1 = new HashMap<String, Object>();
	private static Long lastModifyTime = 0L;
	
	/**
	 * 读取配置
	 * @throws Exception
	 * @author xucr
	 * @CreateDate 2020年6月1日
	 */
	@SuppressWarnings("unchecked")
	public static void readConfig() throws Exception {
		XlsReaderFactory factory = XlsReaderFactory.getInstance();
		XlsReader xlsReader = factory.getDefault();
		WTDocument doc = DocUtil.getWTDocumentByName(DOC_NAME);
		if(null != doc && doc.getModifyTimestamp().getTime() > lastModifyTime ) {
			logger.info("lastModifyTime已更新");
			map1.clear();
			
			Workbook workbook = xlsReader.createWorkbook(DOC_NAME, false);
			if(null != workbook) {
				Sheet sheet = workbook.getSheet(SHEET_NAME);//获取指定名称的sheet
				
				if(null != sheet) {
					xlsReader.setStartRow(START_ROW);//数据开始行
					List<MaterielVo> xlsVos = (List<MaterielVo>) xlsReader.readXls(sheet, MaterielVo.class);
					
					XSSFRow titleRow = (XSSFRow) sheet.getRow(START_ROW - 1);
					Map<String, Object> map2 = null;
					int startTitleRow = 2;//是否是图纸数据开始列
					for(MaterielVo vo : xlsVos) {
						map2 = new HashMap<String, Object>();
						String name = conversion(vo.getName()).trim();
						String passive = conversion(vo.getPassive()).trim();//无源
						String industrialControl = conversion(vo.getIndustrialControl()).trim();//工控
						String td = conversion(vo.getTd()).trim();//车载TD
						String asi = conversion(vo.getAsi()).trim();//消费品A-SI
						String ltps = conversion(vo.getLtps()).trim();//消费品LTPS
						String oled = conversion(vo.getOled()).trim();//消费品OLED
						
						map2.put(titleRow.getCell(startTitleRow).getStringCellValue(), passive);//无源
						map2.put(titleRow.getCell(startTitleRow + 1).getStringCellValue(), industrialControl);//工控
						map2.put(titleRow.getCell(startTitleRow + 2).getStringCellValue(), td);//车载TD
						map2.put(titleRow.getCell(startTitleRow + 3).getStringCellValue(), asi);//消费品A-SI
						map2.put(titleRow.getCell(startTitleRow + 4).getStringCellValue(), ltps);//消费品LTPS
						map2.put(titleRow.getCell(startTitleRow + 5).getStringCellValue(), oled);//消费品OLED
						
						map1.put(name, map2); 
					}
					
					lastModifyTime = doc.getModifyTimestamp().getTime();
				}
			}
		}
	}
	
	/**
	 * 判断图纸是否受控
	 * @param partCNAndENName 原材料中英文
	 * @param type	应用分类：车载TD、消费品A-SI 等
	 * @return
	 * @author xucr
	 * @throws Exception 
	 * @CreateDate 2020年6月2日
	 */
	@SuppressWarnings("unchecked")
	public static String isEffective(String partCNAndENName, String type) throws Exception {
		//物料中英文名称：partCNAndENName
		//仅仅是原材料??
		readConfig();
		logger.info("map>>>" + map1);
		String isEffective = "";
		if(StringUtils.isNotBlank(partCNAndENName) && StringUtils.isNotBlank(type)) {
			Map<String, Object> m = (Map<String, Object>) map1.get(partCNAndENName);
			System.out.println("partCNAndENName >>>>>>>" + partCNAndENName );
			if(null != m) {
				System.out.println("中英文名称【" + partCNAndENName + "】对应的配置数据为：" + m);
				isEffective = (String) m.get(type);
			}
		}
		return conversion(isEffective).trim();
	}
	
	public static String conversion(String str){
		return null == str || "null".equals(str.trim()) ? "" : str.trim();
	}
}
